Skip to content

EDSC-4642: As a user, I would like to set temporal, spatial, or output format capabilities and know which parameters are still valid#2042

Draft
mandyparson wants to merge 7 commits intofeature/EDSC-4638from
EDSC-4642
Draft

EDSC-4642: As a user, I would like to set temporal, spatial, or output format capabilities and know which parameters are still valid#2042
mandyparson wants to merge 7 commits intofeature/EDSC-4638from
EDSC-4642

Conversation

@mandyparson
Copy link
Copy Markdown
Contributor

@mandyparson mandyparson commented Apr 14, 2026

Overview

What is the feature?

https://harmony.earthdata.nasa.gov/docs

Example capabilities doc: https://harmony.earthdata.nasa.gov/capabilities?collectionId=C2723754847-GES_DISC

Currently, Harmony already uses logic handles a request with multiple parameters. The logic will examine a list of services and decide which service to use based on those parameters.

Our logic, needs to go backwards. We need to see which parameters can be used based on the service that we have. Then we have to go one step further and show which parameters are still valid as parameters are selected

What is the Solution?

Removed logic that selected a service
Rebuilt buildHarmony based on capabilities doc
Reconfigure AccessMethod to still meet the needs of constructOrderPayload but by using a different buildHarmony object.

What areas of the application does this impact?

buildHarmony, createprojectslice, accessmethod mainly

Testing

Reproduction steps

Add harmonyHost to your overrideStaticConfig.

Test General Look of C4054955340-GES_DISC:

  • ‘Customize with Harmony’ is now ‘Customize Download’. Sub-heading only relates to downloads. Any mention of harmony has been stripped.
  • Once Customize Download has been selected, newly headed ‘2. Customization options’ Reveals NO drop down menu of services to choose from. Instead, user is presented with a list that is based on capabilities doc found here: https://harmony.earthdata.nasa.gov/capabilities?collectionId=C4054955340-GES_DISC
  • Ensure parity between capabilities doc and customization options.

Test Temporal

  • Select "X-NETCDF-4 (OPeNDAP URL)" as output format. Notice that temporal selection gets faded.
  • Select No Data Conversion and temporal subsetting comes back. Go to Search and select a temporal range.
  • Click ‘Trim output granules…” then try to select "X-NETCDF-4 (OPeNDAP URL)" again. It's been greyed out an disabled so you can't.
  • Deselect “Trim output granules…” and notice the output formats are updated again.

Test Spatial

  • Use C3685668680-LARC_CLOUD for this one. Here: https://harmony.earthdata.nasa.gov/capabilities?collectionId=C3685668680-LARC_CLOUD
  • Select "PNG" as output format.
  • Spatial Subsetting gets greyed out.
  • Go back to C4054955340-GES_DISC and select a point as your spatial subsetting
  • Click 'Trim output granules'
  • Select 'X-NETCDF-4 (OPeNDAP URL)' and notice that your point has been converted with an alert banner.
  • Select any other output format and notice that your point goes back to the way it way.

Test output formats:

  • As you play around with the above, notice how that changes the list. It should never collapse down to just one option. You should also maintain the ability to choose between whatever output formats are available, not just the output formats that are available for the specific service you are currently on.

Downloading
Do the following types of downloads to make sure they still work

  • Download all data (no download customization selected)
  • Download a collection with a temporal range and output_format selected
  • Download a collection with a recurring range set
  • Download a collection with a spatial range selected
  • Download a collection that utilizes application/x-netcdf4;profile=opendap_url and a point that’s been converted to bbox (I can’t get this one to work, doesn’t feel related to my code though)

Attachments

Please include relevant screenshots or files that would be helpful in reviewing and verifying this change.

Checklist

  • I have added automated tests that prove my fix is effective or that my feature works
  • [] New and existing unit tests pass locally with my changes
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 14, 2026

Bundle Size Comparison

Full build details

> earthdata-search@1.0.0 build
> vite build

vite v6.4.2 building for production...
transforming...
✓ 3922 modules transformed.
rendering chunks...
computing gzip size...
static/dist/assets/logo-DBK9nthR.webp                                                      0.97 kB
static/dist/assets/logo-CZz0VEVL.webp                                                      1.14 kB
static/dist/assets/logo-Cycj4Zl7.webp                                                      1.33 kB
static/dist/assets/logo-U_2b2F1P.webp                                                      1.37 kB
static/dist/assets/logo-DrQyzv8O.webp                                                      1.54 kB
static/dist/assets/logo-BtXPiD8D.webp                                                      1.81 kB
static/dist/assets/logo-CBoC93bb.webp                                                      2.16 kB
static/dist/assets/logo-DjzD1LMz.webp                                                      2.39 kB
static/dist/assets/orange-bars-circle-D7AglAGM.webp                                        2.77 kB
static/dist/assets/logo-mTUaHBfB.webp                                                      3.11 kB
static/dist/assets/blue-bars-circle-BoIdEwIS.webp                                          3.67 kB
static/dist/assets/logo-BRHnty9h.webp                                                      4.09 kB
static/dist/assets/cryosphere-icon-DSWEvPIt.svg                                            4.11 kB │ gzip:   1.64 kB
static/dist/assets/logo-m8iUFUyE.webp                                                      4.26 kB
static/dist/assets/logo-BI7QOwpp.webp                                                      4.72 kB
static/dist/assets/logo-CjKnSDvE.webp                                                      7.06 kB
static/dist/index.html                                                                    13.22 kB │ gzip:   3.09 kB
static/dist/assets/plate_carree_earth_scaled-RfqGhO39.png                                 18.14 kB
static/dist/assets/tour-video-thumbnail-BxsZeqvq.webp                                     18.84 kB
static/dist/assets/plate_carree_earth_scaled@2x-BIj0Wstc.png                              45.03 kB
static/dist/assets/image-unavailable-CcXgOtQr.svg                                         52.20 kB │ gzip:  20.77 kB
static/dist/assets/earthdata-search-og-image-Cs5RILJ1.webp                                92.82 kB
static/dist/assets/MODIS-Terra-Swirling-Clouds-In-Atlantic-800x600@2x-DdSR_KXb.webp      132.70 kB
static/dist/assets/MODIS-Terra-Swirling-Clouds-In-Atlantic-2560x1440@2x-CZbMhKXi.webp    224.17 kB
static/dist/assets/MODIS-Terra-Swirling-Clouds-In-Atlantic-800x600@2x-DFWWupvf.webp      381.18 kB
static/dist/assets/MODIS-Terra-Swirling-Clouds-In-Atlantic-2560x1440@2x-BwDp59vN.webp    464.37 kB
static/dist/assets/MODIS-Terra-Swirling-Clouds-In-Atlantic-2560x1440@2x-CeYlmMCD.webp    737.44 kB
static/dist/assets/MODIS-Terra-Swirling-Clouds-In-Atlantic-2560x1440@2x-tQ4uTIyn.webp  1,255.87 kB
static/dist/assets/MODIS-Terra-Swirling-Clouds-In-Atlantic-2560x1440@2x-BqbXRJmQ.webp  1,516.81 kB
static/dist/assets/AdminRetrieval-nNSujMnn.css                                             0.06 kB │ gzip:   0.08 kB
static/dist/assets/AdminPreferencesMetrics-GkGryAtC.css                                    0.10 kB │ gzip:   0.11 kB
static/dist/assets/ChunkedOrderModal-DIli9vpQ.css                                          0.11 kB │ gzip:   0.10 kB
static/dist/assets/TooManyPointsModal-D8ufPyjz.css                                         0.14 kB │ gzip:   0.12 kB
static/dist/assets/AdminRetrievalsMetrics-CT7bgXZt.css                                     0.22 kB │ gzip:   0.13 kB
static/dist/assets/AdminPage-D19229XC.css                                                  0.23 kB │ gzip:   0.16 kB
static/dist/assets/ContactInfo-C7Pr11wu.css                                                0.28 kB │ gzip:   0.18 kB
static/dist/assets/useDeleteSubscription-YPccXDF3.css                                      0.46 kB │ gzip:   0.23 kB
static/dist/assets/ShapefileDropzoneContainer-BG7JE7Dj.css                                 0.53 kB │ gzip:   0.26 kB
static/dist/assets/GranuleFiltersContainer-CfwvM6Mp.css                                    0.59 kB │ gzip:   0.27 kB
static/dist/assets/ShapefileUploadModal-CMzmPyoZ.css                                       0.66 kB │ gzip:   0.32 kB
static/dist/assets/Preferences-DGkx-xES.css                                                0.68 kB │ gzip:   0.24 kB
static/dist/assets/Skeleton-DtMOdDsM.css                                                   0.88 kB │ gzip:   0.34 kB
static/dist/assets/TextWindowActions-aNefZur7.css                                          0.91 kB │ gzip:   0.38 kB
static/dist/assets/RelatedCollection-BaShQZdF.css                                          0.93 kB │ gzip:   0.40 kB
static/dist/assets/CollectionDetailsHighlights-CHDYEfjF.css                                1.24 kB │ gzip:   0.44 kB
static/dist/assets/GranuleResultsHighlights-BIY0O9bb.css                                   1.24 kB │ gzip:   0.41 kB
static/dist/assets/Subscriptions-CYrzsucf.css                                              1.26 kB │ gzip:   0.40 kB
static/dist/assets/EDSCModalContainer-D_JXXJBf.css                                         1.77 kB │ gzip:   0.59 kB
static/dist/assets/AdminProjects-CZeT2VXI.css                                              1.98 kB │ gzip:   0.46 kB
static/dist/assets/AdminRetrievals-DIdJ2AD-.css                                            2.02 kB │ gzip:   0.46 kB
static/dist/assets/DownloadHistory-C2TrZbdc.css                                            2.05 kB │ gzip:   0.47 kB
static/dist/assets/DeprecatedParameterModal-nutVvbLm.css                                   2.12 kB │ gzip:   0.93 kB
static/dist/assets/Projects-5m-RoZO0.css                                                   2.13 kB │ gzip:   0.51 kB
static/dist/assets/EchoForm-VVUehB8V.css                                                   3.47 kB │ gzip:   1.06 kB
static/dist/assets/SearchTour-AJompJPK.css                                                 4.82 kB │ gzip:   1.22 kB
static/dist/assets/index-BOElThXL.css                                                      6.47 kB │ gzip:   1.24 kB
static/dist/assets/OrderStatus-qyLNmnfS.css                                                8.49 kB │ gzip:   1.93 kB
static/dist/assets/createSpatialDisplay-CiT4b-tQ.css                                      10.62 kB │ gzip:   2.41 kB
static/dist/assets/MapContainer-GerI1QoD.css                                              17.00 kB │ gzip:   5.89 kB
static/dist/assets/Project-RbLZgqcX.css                                                   20.04 kB │ gzip:   4.07 kB
static/dist/assets/Search-DWJQ45Qd.css                                                    69.43 kB │ gzip:  10.66 kB
static/dist/assets/index-DvsUNaze.css                                                    339.58 kB │ gzip: 109.39 kB
static/dist/assets/logo-BHeuky8i.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-C2M9lK3U.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-BbJQ0fWs.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-CW6PQqmQ.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-CM8gX-og.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-CGJHAKVD.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-DOLER09h.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-C6Ht_tBx.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-J7t-4CBp.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-CxvnVTz2.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-C9HDQHSy.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-IHV3gtAZ.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-Dedvhxzp.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo--kH-hKRS.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-Z4bYAKVs.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-nOuRrv94.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-DIxV4RPX.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/logo-uABdcgsF.js                                                        0.06 kB │ gzip:   0.08 kB
static/dist/assets/pluralize-49vSaAHF.js                                                   0.08 kB │ gzip:   0.09 kB
static/dist/assets/accessMethodTypes-CY5JnOnd.js                                           0.13 kB │ gzip:   0.14 kB
static/dist/assets/commafy-BfQYQOA4.js                                                     0.14 kB │ gzip:   0.14 kB
static/dist/assets/requestDebounceDuration-B92It3cW.js                                     0.16 kB │ gzip:   0.11 kB
static/dist/assets/subscriptions-C8eiBnut.js                                               0.41 kB │ gzip:   0.21 kB
static/dist/assets/Table-BAtOQPqa.js                                                       0.60 kB │ gzip:   0.38 kB
static/dist/assets/humanizedQueryValueFormatters-CIZcasg0.js                               1.00 kB │ gzip:   0.54 kB
static/dist/assets/TooManyPointsModal-3oYH-OgL.js                                          1.10 kB │ gzip:   0.58 kB
static/dist/assets/DownloadsLayout-PQEXjAFa.js                                             1.12 kB │ gzip:   0.36 kB
static/dist/assets/metricsDataAccess-B0dv9eSs.js                                           1.26 kB │ gzip:   0.35 kB
static/dist/assets/AdminLayout-xg8bNapb.js                                                 1.45 kB │ gzip:   0.48 kB
static/dist/assets/index-DNiUIiJM.js                                                       1.64 kB │ gzip:   0.94 kB
static/dist/assets/useLazyQuery-pgRd1C99.js                                                1.70 kB │ gzip:   0.89 kB
static/dist/assets/DefinitionList-BehPyzwr.js                                              1.85 kB │ gzip:   0.55 kB
static/dist/assets/AdminPage-Bcy7Uxf8.js                                                   1.98 kB │ gzip:   0.51 kB
static/dist/assets/Skeleton-B46AUAyV.js                                                    2.23 kB │ gzip:   0.71 kB
static/dist/assets/KeyboardShortcutsModal-DbvEj4M1.js                                      2.36 kB │ gzip:   0.85 kB
static/dist/assets/AdminIndex-C5FkTNdY.js                                                  2.69 kB │ gzip:   0.86 kB
static/dist/assets/useCreateRetrieval-B_Jpu_Cz.js                                          3.31 kB │ gzip:   1.59 kB
static/dist/assets/DeprecatedParameterModal-DNYS_YgV.js                                    3.42 kB │ gzip:   1.30 kB
static/dist/assets/AdminProject-DvuIEiUv.js                                                3.66 kB │ gzip:   1.03 kB
static/dist/assets/EditSubscriptionModal-CrfgvZGW.js                                       3.73 kB │ gzip:   1.27 kB
static/dist/assets/ChunkedOrderModal-BZG6qOkR.js                                           4.14 kB │ gzip:   1.36 kB
static/dist/assets/ShapefileUploadModal-vB2--0N1.js                                        4.97 kB │ gzip:   1.00 kB
static/dist/assets/AboutCSDAModal-BZtPH7W0.js                                              5.18 kB │ gzip:   1.19 kB
static/dist/assets/AdminPreferencesMetrics-CeBdj3OW.js                                     5.66 kB │ gzip:   1.05 kB
static/dist/assets/EarthdataDownloadRedirect-CfcI7jHn.js                                   5.98 kB │ gzip:   1.11 kB
static/dist/assets/EDSCModalContainer-DTWORMMy.js                                          7.38 kB │ gzip:   1.72 kB
static/dist/assets/GranuleResultsHighlights-Bf9Ry1-U.js                                    7.92 kB │ gzip:   1.61 kB
static/dist/assets/DownloadHistory-BpBj-mL9.js                                             7.99 kB │ gzip:   1.69 kB
static/dist/assets/CollectionDetailsHighlights-Cb5JSCx4.js                                 9.97 kB │ gzip:   1.27 kB
static/dist/assets/useDeleteSubscription-CtDUQ-54.js                                      10.57 kB │ gzip:   2.72 kB
static/dist/assets/Modal-B0H_l43B.js                                                      10.74 kB │ gzip:   4.05 kB
static/dist/assets/AdminRetrieval-CKYP0Xff.js                                             10.84 kB │ gzip:   2.13 kB
static/dist/assets/AdminProjects-RHA-PuXr.js                                              10.85 kB │ gzip:   1.92 kB
static/dist/assets/RelatedCollection-B_MPenlb.js                                          11.09 kB │ gzip:   4.13 kB
static/dist/assets/AboutCwicModal-C8yBHU3i.js                                             11.28 kB │ gzip:   2.26 kB
static/dist/assets/AdminRetrievals-CdZvrQmj.js                                            11.43 kB │ gzip:   1.99 kB
static/dist/assets/Projects-B1X7tKPG.js                                                   11.66 kB │ gzip:   2.14 kB
static/dist/assets/Subscriptions-B83O2zrU.js                                              13.22 kB │ gzip:   2.14 kB
static/dist/assets/ContactInfo-D0DXJ1Bk.js                                                13.41 kB │ gzip:   1.92 kB
static/dist/assets/AdminRetrievalsMetrics-BRqBISbP.js                                     15.01 kB │ gzip:   2.08 kB
static/dist/assets/index-BX03WHej.js                                                      35.34 kB │ gzip:  12.82 kB
static/dist/assets/GranuleFiltersContainer-BjLtVAby.js                                    39.66 kB │ gzip:   6.73 kB
static/dist/assets/styles-DUGNBlh1.js                                                     60.27 kB │ gzip:  18.66 kB
static/dist/assets/moment-BAtM24Ew.js                                                     60.92 kB │ gzip:  19.77 kB
static/dist/assets/createSpatialDisplay-BjG0uZ_g.js                                       81.69 kB │ gzip:  18.53 kB
static/dist/assets/lodash-DO8XiTt0.js                                                     92.24 kB │ gzip:  31.91 kB
static/dist/assets/OrderStatus-Du-q21iF.js                                               108.80 kB │ gzip:  20.21 kB
static/dist/assets/EchoForm-aY74usxO.js                                                  108.86 kB │ gzip:  33.76 kB
static/dist/assets/ShapefileDropzoneContainer-D2AYW_Io.js                                119.75 kB │ gzip:  40.13 kB
static/dist/assets/SearchTour-Cpw193PN.js                                                139.43 kB │ gzip:  37.01 kB
static/dist/assets/edscUtils-166ermdD.js                                                 141.73 kB │ gzip:  46.95 kB
static/dist/assets/Project-DYL0h_tX.js                                                   307.72 kB │ gzip:  91.24 kB
static/dist/assets/Preferences-Bi48EWpl.js                                               367.69 kB │ gzip: 115.32 kB
static/dist/assets/react-BTzb2ItR.js                                                     409.72 kB │ gzip: 127.89 kB
static/dist/assets/Search-BzaWDagb.js                                                    660.93 kB │ gzip: 155.52 kB
static/dist/assets/index-DsDUC_Dp.js                                                   1,122.92 kB │ gzip: 348.21 kB
static/dist/assets/MapContainer-CSOa791f.js                                            1,332.05 kB │ gzip: 270.47 kB
✓ built in 34.70s

The full bundle is smaller than main by -104.49 kB. 🎉

The index.js is smaller than main by -6.07 kB. 🎉

Run npx vite-bundle-visualizer to review the bundle in more detail.

File Main Branch Diff
Total 11022.4 kB 10917.91 kB -104.49 kB
index.js 1165.97 kB 1159.9 kB -6.07 kB
index.js (gzip) 363.38 kB 361.97 kB -1.41 kB
index.css 346.05 kB 346.05 kB 0 kB
index.css (gzip) 110.63 kB 110.63 kB 0 kB
Number of files 139 139 0
Build Time 36.73 s 34.7 s -2.03 s

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 14, 2026

Codecov Report

❌ Patch coverage is 94.44444% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 95.18%. Comparing base (a6fd9d7) to head (31eb9ae).
⚠️ Report is 2 commits behind head on feature/EDSC-4638.

Files with missing lines Patch % Lines
...ic/src/js/components/AccessMethod/AccessMethod.jsx 84.09% 7 Missing ⚠️
Additional details and impacted files
@@                  Coverage Diff                  @@
##           feature/EDSC-4638    #2042      +/-   ##
=====================================================
- Coverage              95.81%   95.18%   -0.63%     
=====================================================
  Files                    753      756       +3     
  Lines                  17411    17448      +37     
  Branches                4893     4931      +38     
=====================================================
- Hits                   16682    16608      -74     
- Misses                   678      775      +97     
- Partials                  51       65      +14     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@mandyparson mandyparson changed the title EDSC-4642: Initial Commit EDSC-4642: As a user, I would like to set temporal, spatial, or output format capabilities and know which parameters are still valid Apr 16, 2026
}
}),

// This is where I'm going to send user selections
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// This is where I'm going to send user selections
TODO: <Some-ticket>: // This is where I'm going to send user selections

Comment on lines 114 to +115
// Only process service types that EDSC supports
if (![ESI, ECHO_ORDERS, HARMONY, OPENDAP, SWODLR].includes(formattedServiceType)) return {}
if (![ESI, ECHO_ORDERS, OPENDAP, SWODLR].includes(formattedServiceType)) return {}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feels like this should stay in the list or some comments up here about why Harmony is not in there

* Harmony expects that output formats be provided in the form of mimetypes,
* this is a map between UMM-S values and their respective mimetypes
* this is a map between mimetypes and their respective human readable values
* TO-DO, these values will be coming from capabilites doc version 4
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same use a ticket# for those TOODS:

Comment on lines +278 to +279
// Return if a previous request was unauthorized
if (isUnauthorized) return
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for passing to it if we to do an edl-callback or?

export const buildHarmony = (serviceItem, params) => {
const { associatedVariables } = params

export const buildHarmony = (harmonyCapabilities, earthdataEnvironment) => {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we still need this as a standalone method seems like its just passing things between components the business logic isn't in here anymore

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants